git status # 查看是否有需要commit的操作
git reset # HEAD^ HEAD^^ HEAD~100 --hard会回退到上个版本的已提交状态，而--soft会回退到上个版本的未提交状态
# 使用commit id 来跳转到任意指定的版本
git reflog # 来查看(用来记录每一次命令)用于查看每次commit id

# key in /root/.ssh/
# git clone git@github.com:zhuxstest/cmake_git_learn_bilibili.git
# git clone git@gitee.com-main:zhuxstest/cmake_git_learn_bilibili.git
# git clone git@gitee.com-other:zhuxstest/cmake_git_learn_bilibili.git

git remote add origin git@github.com:michaelliao/learngit.git # 将没有远程链接的本地仓库(本地从零开始创建的)链接到远程仓库
git remote set-url origin <链接> # 修改远程仓库链接，https拉取的库可能会需要

git branch -a # 查看所有分支
git branch -vv # 查看当前本地所有分支的详细信息
git merge dev # 合并dev分支到当前分支
git merge # 相当于git merge origin/HEAD 将当前分支对应的远程分支合并到当前分支
# --no-ff 参数不使用fast forward模式, 以此保留被合并分支的提交信息（即使删掉分支，也可以git log看到分支提交信息而不是单纯的master一条线）
git branch -d <name> # 删除已merge的分支
git branch -D <name> # 强制删除未merge的分支
git branch --set-upstream-to origin/master # 将当前分支和远程分支master建立链接
git switch -c dev # 切换到dev分支，如果dev分支不存在，则创建dev分支并切换到dev分支
git switch -c dev origin/dev # 切换到dev分支，如果dev分支不存在，则创建dev分支并切换到dev分支，并拉取远程dev分支到本地dev分支
git fetch # 和远程仓库通信，获取所有最新远程分支信息但不会拉取到本地，确保git branch -a看到的是最新的远程分支列表
git pull # 等价于git fetch+git merge：合并对应的远程分支到当前分支
git pull orgin dev # 拉取远程dev分支到本地dev分支，如果本地dev分支不存在，则创建dev分支并拉取远程dev分支到本地dev分支
git push origin dev # 将本地dev分支推送到远程dev分支，如果远程dev分支不存在，则创建远程dev分支并推送本地dev分支到远程dev分支
git push -u origin dev # -u == --set-upstream指的是将本地分支和被推送的远程分支建立链接，一般用于初次推送和建立链接
git push origin :dev # 删除远程dev分支
